package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Curso;
import jschool.persistencia.Conexion;

public class ManejadorDeCurso {
	private static ManejadorDeCurso instancia = null;
	private ArrayList<Curso> cursos = null;
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;

	private ManejadorDeCurso() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeCurso getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeCurso();
		}
		return instancia;
	}

	public ArrayList<Curso> getCurso() {
		cursos = new ArrayList<Curso>();
		try {
			String sql = "SELECT * FROM Curso";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Curso curso = new Curso(rs.getInt(1), rs.getString(2), rs
						.getString(3), rs.getInt(4));
				cursos.add(curso);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Curso",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return cursos;
	}

	public int agregarCurso(Curso curso) {
		int fila = 0;
		try {
			String sql = "INSERT INTO Curso(idCurso, curso, seccion, cantidadEstudiantes) VALUES(0,?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setString(1, curso.getCurso());
			stmt.setString(2, curso.getSeccion());
			stmt.setInt(3, curso.getCantidadEstudiantes());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Curso",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int modificarCurso(Curso curso, int id) {
		int fila = 0;
		try {
			String sql = "UPDATE Curso SET curso = ?, seccion = ?, cantidadEstudiantes = ? WHERE idCurso = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setString(1, curso.getCurso());
			stmt.setString(2, curso.getSeccion());
			stmt.setInt(3, curso.getCantidadEstudiantes());
			stmt.setInt(4, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Curso",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int eliminarCurso(int id) {
		int fila = 0;
		try {
			String sql = "DELETE FROM Curso WHERE idCurso = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Curso",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

}
